package cl.gob.minvu.catastromobile;

import com.google.gson.Gson;

import cl.gob.minvu.catastromobile.dao.ComunaDAO;
import cl.gob.minvu.catastromobile.dao.UsuarioDAO;
import cl.gob.minvu.catastromobile.entities.Comuna;
import cl.gob.minvu.catastromobile.entities.Direccion;
import cl.gob.minvu.catastromobile.entities.Ficha;
import cl.gob.minvu.catastromobile.util.GenericUtil;
import cl.gob.minvu.catastromobile.util.MyComunaAdapter;
import android.content.Intent;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Spinner;

/**
 * @author psep
 * 
 */
public class AntViviendaEncDirActivity extends AbstractActivity {

	private EditText calle;
	private EditText numeracion;
	private EditText casa;
	private EditText block;
	private EditText depto;
	private EditText piso;
	private EditText otros;
	private EditText villa;
	private Spinner comuna;
	private Spinner zona;
	private EditText telefono;
	private Direccion direccion;
	private boolean moradores;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_ant_vivienda_enc_dir);
		super.session = super.getSharedPreferences(GenericUtil.SESSION, MODE_PRIVATE);
		this.calle = (EditText) super
				.findViewById(R.id.editTextCalleEncuestado);
		this.numeracion = (EditText) super
				.findViewById(R.id.editTextNumEncuestado);
		this.casa = (EditText) super
				.findViewById(R.id.editTextCasaEncuestado);
		this.block = (EditText) super
				.findViewById(R.id.editTextBlockEncuestado);
		this.depto = (EditText) super
				.findViewById(R.id.editTextDeptoEncuestado);
		this.piso = (EditText) super.findViewById(R.id.editTextPisoEncuestado);
		this.otros = (EditText) super
				.findViewById(R.id.editTextOtrosDirEncuestado);
		this.villa = (EditText) super
				.findViewById(R.id.editTextVillaEncuestado);
		this.comuna = (Spinner) super
				.findViewById(R.id.spinnerComunaEncuestado);
		this.zona = (Spinner) super
				.findViewById(R.id.spinnerZonaDireccionEncuestado);
		this.telefono = (EditText) super
				.findViewById(R.id.editTextFonoEncuestado);
		this.comuna.setAdapter(new MyComunaAdapter(
				AntViviendaEncDirActivity.this, new ComunaDAO(this)
						.retrieve(this.getRegionUser())));
		this.onLoadSession();
		this.validaMoradores();
	}

	/**
	 * @return
	 */
	private int getRegionUser() {
		return new UsuarioDAO(this).retrieve().region;
	}

	/**
	 * 
	 */
	private void validaMoradores() {
		String fichaJson = super.session.getString(GenericUtil.FICHA, null);

		if (fichaJson != null) {
			Gson gson = new Gson();
			Ficha ficha = gson.fromJson(fichaJson, Ficha.class);

			if (ficha.moradores == 2) {
				this.moradores = false;
				this.telefono.getText().clear();
				this.telefono.setEnabled(false);
			} else {
				this.moradores = true;
			}
		}
	}
	
	/**
	 * 
	 */
	private void onLoadSession() {
		String direccionJson = super.session.getString(GenericUtil.DIRECCION, null);
		
		if (direccionJson != null) {
			Gson gson = new Gson();
			this.direccion = gson.fromJson(direccionJson, Direccion.class);
			this.loadTextFrm();
		}
	}
	
	/**
	 * 
	 */
	private void loadTextFrm() {
		if (this.direccion != null) {
			this.calle.setText(this.direccion.calle);
			this.numeracion.setText(String.valueOf(this.direccion.numeracion));
			this.casa.setText(this.direccion.casa);
			this.block.setText(this.direccion.block);
			this.depto.setText(this.direccion.depto);
			this.piso.setText(this.direccion.piso);
			this.otros.setText(this.direccion.otros);
			this.villa.setText(this.direccion.villa);
			this.comuna.setSelection(this.direccion.comunaSpinner);
			this.zona.setSelection(this.direccion.zona);
			this.telefono.setText(String.valueOf(this.direccion.telefono));
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.ant_vivienda_enc_dir, menu);
		return true;
	}

	/**
	 * 
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();

		switch (id) {
		case R.id.direccion_frm_descartar:
			this.reset();
			return true;

		case R.id.direccion_frm_atras:
			if (this.moradores){
				super.startActivity(new Intent(AntViviendaEncDirActivity.this,
						AntViviendaEncActivity.class));
			} else {
				super.startActivity(new Intent(AntViviendaEncDirActivity.this,
						FormActivity.class));
			}
			
			finish();
			return true;

		default:
			return super.onOptionsItemSelected(item);
		}
	}
	
	/**
	 * 
	 */
	private void loadDireccion(){
		this.direccion = new Direccion();
		this.direccion.calle = super.getStringEditText(this.calle);
		this.direccion.numeracion = GenericUtil.stringToInt(super.getStringEditText(this.numeracion));
		this.direccion.casa = super.getStringEditText(this.casa);
		this.direccion.block = super.getStringEditText(this.block);
		this.direccion.depto = super.getStringEditText(this.depto);
		this.direccion.piso = super.getStringEditText(this.piso);
		this.direccion.otros = super.getStringEditText(this.otros);
		this.direccion.villa = super.getStringEditText(this.villa);
		this.direccion.comunaSpinner = super.getIdSpinner(this.comuna);
		this.direccion.comuna = ((Comuna) this.comuna.getSelectedItem());
		this.direccion.zona = super.getIdSpinner(this.zona);
		this.direccion.telefono = GenericUtil.stringToInt(super.getStringEditText(this.telefono));
	}

	/**
	 * @param button
	 */
	public void onClickSgte(View button) {
		if (this.validateFrm()) {
			this.loadDireccion();
			
			Gson gson = new Gson();
			String serializable = gson.toJson(this.direccion);
			Editor edit = super.session.edit();
			edit.putString(GenericUtil.DIRECCION, serializable);
			edit.commit();
			
			super.startActivity(new Intent(AntViviendaEncDirActivity.this, AntViviendaActivity.class));
			finish();
		}
	}

	/**
	 * 
	 */
	@Override
	public void reset() {
		this.direccion = null;
		Editor edit = super.session.edit();
		edit.remove(GenericUtil.DIRECCION);
		edit.commit();
		this.calle.setText("");
		this.numeracion.setText("");
		this.casa.setText("");
		this.block.setText("");
		this.depto.setText("");
		this.piso.setText("");
		this.otros.setText("");
		this.villa.setText("");
		this.comuna.setSelection(0);
		this.zona.setSelection(0);
		this.telefono.setText("");
	}

	/**
	 * @return boolean
	 */
	@Override
	public boolean validateFrm() {
		int validador = 0;
		
		if (super.getStringEditText(this.calle).length() == 0) {
			validador = validador + 1;
			this.calle.setError("Debe ingresar la calle");
		}
		
		if (super.getStringEditText(this.numeracion).length() == 0) {
			validador = validador + 1;
			this.numeracion.setError("Debe ingresar la numeración");
		}
		
		if (super.getIdSpinner(this.comuna) == 0) {
			super.toastMsg("Debe ingresar su comuna");
			validador = validador + 1;
		}
		
		if (validador == 0) {
			return true;
		} else {		
			return false;
		}
	}
}
